using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework.Input; namespace SuperPolarity { static class InputController { static Dictionary>> Listeners; static Dictionary> RegisteredKeys; static Dictionary> RegisteredButtons; static GamePadState InputGamePadState; static KeyboardState InputKeyboardState; /* * Registered Events. * * You register: name of the event (ie. attack) and a key associated with it. * or button... Left Stick /always/ dispatches move event. */ static InputController() { Listeners = new Dictionary>>(); InputKeyboardState = new KeyboardState(); InputGamePadState = new GamePadState(); } public static void UpdateInput() { Poll(); DispatchMoveEvents(); DispatchRegisteredEvents(); } private static void Poll() { InputGamePadState = GamePad.GetState(Microsoft.Xna.Framework.PlayerIndex.One); InputKeyboardState = Keyboard.GetState(); } private static void DispatchRegisteredEvents() { } private static void DispatchMoveEvents() { float xMovement = 0.0f; float yMovement = 0.0f; // Dispatch the moveX / MoveY events every frame. xMovement = InputGamePadState.ThumbSticks.Left.X; yMovement = -InputGamePadState.ThumbSticks.Left.Y; Console.WriteLine("Dispatching Input {0}", InputKeyboardState.IsKeyDown(Keys.Left)); if (InputKeyboardState.IsKeyDown(Keys.Left)) { xMovement = -1.0f; } if (InputKeyboardState.IsKeyDown(Keys.Right)) { xMovement = 1.0f; } if (InputKeyboardState.IsKeyDown(Keys.Up)) { yMovement = -1.0f; } if (InputKeyboardState.IsKeyDown(Keys.Down)) { yMovement = 1.0f; } Dispatch("moveX", xMovement); Dispatch("moveY", yMovement); } public static void Bind(string eventName, Action listener) { List> newListenerList; List> listenerList; bool foundListeners; if (!Listeners.ContainsKey(eventName)) { newListenerList = new List>(); Listeners.Add(eventName, newListenerList); } foundListeners = Listeners.TryGetValue(eventName, out listenerList); listenerList.Add(listener); } public static void Dispatch(string eventName, float value) { List> listenerList; bool foundListeners; foundListeners = Listeners.TryGetValue(eventName, out listenerList); if (!foundListeners) { return; } foreach (Action method in listenerList) { method(value); } } } }